package org.dromara.common.core.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;

/**
 * @创建者：zhouwei
 * @创建时间：2021/9/29
 * @描述：
 */
public class MathUtil {

	/**
	 * 2个 Int 类型数字 相除 保留2位小数
	 *
	 * @param a
	 * @param b
	 * @return
	 */
	public static double getDoubleByInt(long a, long b) {
		DecimalFormat df = new DecimalFormat("0.00");
		String num = "0.00";
		if (b > 0) {
			float f = (float) a / b;
			num = df.format(f);
		}
		return Double.parseDouble(num);
	}

	/**
	 * 2个 Double 类型数字 相除 保留2位小数
	 *
	 * @param a
	 * @param b
	 * @return
	 */
	public static double getDoubleByD(double a, double b) {
		DecimalFormat df = new DecimalFormat("0.00");
		String num = "0.00";
		if (b > 0) {
			double f = a / b;
			num = df.format(f);
		}
		return Double.parseDouble(num);
	}

	/**
	 *  对当前小数保留2位
	 *
	 * @param a
	 * @return
	 */
	public static double getDouble(double a) {
//		DecimalFormat df = new DecimalFormat("0.00");
//		String num = "0.00";
//		num = df.format(a);
//		return Double.parseDouble(num);
		BigDecimal bg = new BigDecimal(a).setScale(2, RoundingMode.HALF_UP);
		return bg.doubleValue();
	}



	/** 保留两位小数，四舍五入的一个老土的方法 */
	public static double formatDouble1(double d) {
		return (double)Math.round(d*100)/100;
	}

	/**
	 *  四舍五入的 保留2位小数
	 * @param d
	 * @return
	 */
	public static double formatDouble2(double d) {
		// 旧方法，已经不再推荐使用
		// BigDecimal bg = new BigDecimal(d).setScale(2, BigDecimal.ROUND_HALF_UP);
		// 新方法，如果不需要四舍五入，可以使用RoundingMode.DOWN
		BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.UP);
		return bg.doubleValue();
	}

	/**
	 *   带逗号的
	 * @param d
	 * @return
	 */
	public static String formatDouble3(double d) {
		NumberFormat nf = NumberFormat.getNumberInstance();
		// 保留两位小数
		nf.setMaximumFractionDigits(2);
		// 如果不需要四舍五入，可以使用RoundingMode.DOWN
		nf.setRoundingMode(RoundingMode.UP);
		return nf.format(d);
	}
	/**这个方法挺简单的 */
	public static String formatDouble4(double d) {
		DecimalFormat df = new DecimalFormat("#.00");
		return df.format(d);
	}
	/**如果只是用于程序中的格式化数值然后输出，那么这个方法还是挺方便的, 应该是这样使用：System.out.println(String.format("%.2f", d));*/
	public static String formatDouble5(double d) {
		return String.format("%.2f", d);
	}



	public static double getDoubleUp(double d){
		BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.HALF_UP);
		return bg.doubleValue();
	}


	/**
	 *  根据缴费金额  得到 充电小时数
	 * @param money
	 * @return
	 */
	public static int getHourByPayMoney(double money,double singlePrice){
		double hour = getDouble( money / singlePrice);
		return (int) hour;
	}


	/**
	 *  对当前小数保留1位
	 *
	 * @param a
	 * @return
	 */
	public static double getFloat(double a) {
		DecimalFormat df = new DecimalFormat("0.0");
		String num = "0.0";
		num = df.format(a);
		return Double.parseDouble(num);
	}

	/**
	 *  a 占 b 的百分比
	 * @param a
	 * @param b
	 * @return
	 */
	public static String getRatio(long a, long b) {
		DecimalFormat df = new DecimalFormat("0.00");
		String num = "0.00";
		if (b > 0) {
			float f = (float) a / b;
			num = df.format(f*100);
		}
		return num;
	}

	/**
	 * 向上取整
	 * @param numerator
	 * @param denominator
	 * @return
	 */
	public static int getCeil(int numerator, int denominator){
		//向上取整
		double a = numerator;
		double b = denominator;
		double ceil = Math.ceil(a / b);
		System.out.println("ceil : " + ceil);
		int timeCount = (int) ceil;
		if(timeCount == 0){
			timeCount = 1;
		}
		return timeCount;
	}


	public static void main(String[] args) {

		int timeCount = getCeil( 13, 30);
		System.out.println("timeCount: " + timeCount);

//
//
//		double d1 = 10.12;
//		double d2 = 11.123;
//		double d = getDoubleByInt(123,57);
//		double d3 = getDoubleByD(d1,d2);
//		System.out.println(d3);
//
//		int minInt = 0;
//		minInt = getHourByPayMoney(1,0.25);
////		System.out.println("hour: " + minInt);
//
//
//		double dddd = 5.0d;
//		int aaaa = (int)dddd;
//		System.out.println("aa: " + aaaa);
//
//
//		double d22 = formatDouble2(12345.001d);
//		String d23 = formatDouble3(12345.001d);
//		String d24 = formatDouble4(12345.001d);
//		String d25 = formatDouble5(12345.001d);
//		String d26 = formatDouble5(12345.156d);
//		double d27 = getDoubleUp(12345.156d);
//		double d28 = getDoubleUp(12345.111d);
//
//		System.out.println("d22: " + d22);
//		System.out.println("d23: " + d23);
//		System.out.println("d24: " + d24);
//		System.out.println("d25: " + d25);
//		System.out.println("d26: " + d26);
//		System.out.println("d27: " + d27);
//		System.out.println("d28: " + d28);
//
//
//
//		int aa = ((180 * 10) / 12) * 60;
//		System.out.println("aa:" + aa);
	}


}
